diff options
Diffstat (limited to 'src/app/(main)/teams/[teamId]/TeamMembersTable.tsx')
| -rw-r--r-- | src/app/(main)/teams/[teamId]/TeamMembersTable.tsx | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx new file mode 100644 index 0000000..8414908 --- /dev/null +++ b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx @@ -0,0 +1,55 @@ +import { DataColumn, DataTable, Row } from '@umami/react-zen'; +import { useMessages } from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; +import { TeamMemberEditButton } from './TeamMemberEditButton'; +import { TeamMemberRemoveButton } from './TeamMemberRemoveButton'; + +export function TeamMembersTable({ + data = [], + teamId, + allowEdit = false, +}: { + data: any[]; + teamId: string; + allowEdit: boolean; +}) { + const { formatMessage, labels } = useMessages(); + + const roles = { + [ROLES.teamOwner]: formatMessage(labels.teamOwner), + [ROLES.teamManager]: formatMessage(labels.teamManager), + [ROLES.teamMember]: formatMessage(labels.teamMember), + [ROLES.teamViewOnly]: formatMessage(labels.viewOnly), + }; + + return ( + <DataTable data={data}> + <DataColumn id="username" label={formatMessage(labels.username)}> + {(row: any) => row?.user?.username} + </DataColumn> + <DataColumn id="role" label={formatMessage(labels.role)}> + {(row: any) => roles[row?.role]} + </DataColumn> + {allowEdit && ( + <DataColumn id="action" align="end"> + {(row: any) => { + if (row?.role === ROLES.teamOwner) { + return null; + } + + return ( + <Row alignItems="center" maxHeight="20px"> + <TeamMemberEditButton teamId={teamId} userId={row?.user?.id} role={row?.role} /> + <TeamMemberRemoveButton + teamId={teamId} + userId={row?.user?.id} + userName={row?.user?.username} + /> + </Row> + ); + }} + </DataColumn> + )} + </DataTable> + ); +} |